---
title: محافظ مخصصة
description: إنشاء محفظة مخصصة
---

# محافظ مخصصة

## إنشاء محفظة مخصصة

> ملاحظة: واجهة برمجة التطبيقات هذه غير مستقرة وقد تتغير في المستقبل القريب. سنضيف المزيد من المحافظ المدمجة مع مرور الوقت. [أخبرنا](https://github.com/rainbow-me/rainbowkit/issues) إذا كانت هناك محافظ معينة تهمك.

يتم توفير نوع الوظيفة `Wallet` لمساعدتك في تعريف المحافظ المخصصة الخاصة بك. يمكن تكوين الخصائص التالية على القيمة التي ترجعها وظيفة `Wallet` الخاصة بك:

### خصائص المحفظة

<PropsTable
  data={[  {
      name: 'id',
      required: true,
      type: 'string',
      description: 'معرف فريد لكل محفظة',
    },
    {
      name: 'name',
      required: true,
      type: 'string',
      description: 'اسم المحفظة القابل للقراءة من قبل البشر',
    },
    {
      name: 'rdns',
      required: false,
      type: 'string',
      description: 'RDNS للمحفظة التي تدعم EIP6963',
    },
    {
      name: 'shortName',
      required: false,
      type: 'string | undefined',
      description: 'اسم مختصر اختياري للاستخدام على الموبايل',
    },
    {
      name: 'iconUrl',
      required: true,
      type: 'string | (() => Promise<string>)',
      description:
        'عنوان URL لأيقونة المحفظة، أو وعد يكتمل مع رابط بيانات Base64',
    },
    {
      name: 'iconAccent',
      required: false,
      type: 'string',
      description:
        'لون التمييز المستخدم في تدفقات التحميل للمحافظ التي تحتوي على امتداد للمتصفح وتطبيق الموبايل',
    },
    {
      name: 'iconBackground',
      required: true,
      type: 'string',
      description: 'لون الخلفية أثناء تحميل أيقونة المحفظة',
    },
    {
      name: 'installed',
      required: false,
      type: 'boolean | undefined',
      description: (
        <>
          هل المحفظة معروفة بأنها مُثبتة، أو{' '}
          <code>undefined</code> إذا كانت غير محددة
        </>
      ),
    },
    {
      name: 'downloadUrls',
      required: false,
      type: '{ android?: string, ios?: string, mobile?: string, qrCode?: string, chrome?: string, firefox?: string, edge?: string, safari?: string, opera?: string, browserExtension?: string } | undefined',
      typeSimple: 'DownloadUrls | undefined',
      description: 'كائن يحتوي على روابط التحميل',
    },
    {
      name: 'hidden',
      required: false,
      type: '(args: { wallets: Array<{ id: string, connector: Connector, installed?: boolean }> }) => boolean',
      typeSimple: '(args) => boolean | undefined',
      description:
        'وظيفة لحساب ما إذا كان يجب إخفاء هذه المحفظة من القائمة. هذا مفيد لتحديد المحافظ الاحتياطية العامة، على سبيل المثال، الاستخدام التلقائي للمحفظة "المدخل" المبني على حق خاصية `hidden`.'
    },
    {
      name: 'createConnector',
      required: true,
      type: '() => RainbowKitConnector',
      typeSimple: 'RainbowKitConnector',
      description:
        'وظيفة لتوفير مثيل الموصل وتكوينه لطرق اتصال مختلفة موصوفة أدناه',
    },
    {
      name: 'mobile',
      required: false,
      type: '{ getUri?: (uri: string) => string }',
      typeSimple: 'object',
      description:
        'وظيفة لحل عنوان اتصال محفظة الموبايل',
    },
    {
      name: 'desktop',
      required: false,
      type: '{ getUri?: (uri: string) => string }',
      typeSimple: 'object',
      description: 'وظيفة لحل رابط التطبيقات المكتبية العميقة',
    },
    {
      name: 'qrCode',
      required: false,
      type: "{ getUri: (uri: string) => string, instructions?: { learnMoreUrl: string, steps: Array<{ step: 'install' | 'create' | 'scan', title: string, description: string }> }}}",
      typeSimple: 'object',
      description:
        'كائن يحتوي على وظيفة لحل عنوان QR code المميز، بالإضافة إلى تعليمات اختيارية لإعداد محفظة الموبايل',
    },
    {
      name: 'extension',
      required: false,
      type: "{ instructions?: { learnMoreUrl: string, steps: Array<{ step: 'install' | 'create' | 'scan', title: string, description: string }> }}}",
      typeSimple: 'object',
      description:
        'كائن يحتوي على تعليمات إعدادية اختيارية لامتداد المتصفح',
    },
    {
      name: 'createConnector',
      required: true,
      type: "createConnector: (details: WalletDetailsParams) => CreateConnectorFn",
      typeSimple: '(details: WalletDetailsParams) => CreateConnectorFn',
      description: 'وظيفة لتوفير مثيل الموصل',
    },
  ]}
/>

### خصائص روابط التحميل

<PropsTable
  data={[  {
      name: 'android',
      required: false,
      type: 'string',
      description: 'رابط متجر جوجل بلاي',
    },
    {
      name: 'ios',
      required: false,
      type: 'string',
      description: 'رابط متجر آبل ستور',
    },
    {
      name: 'mobile',
      required: false,
      type: 'string',
      description:
        'صفحة هبوط للمستخدمين عند عدم توفر `اندرويد` أو `آي أو إس`',
    },
    {
      name: 'qrCode',
      required: false,
      type: 'string',
      description:
        'صفحة هبوط للمستخدمين الذين يمسحون رمز QR لتنزيل الموبايل',
    },
    {
      name: 'chrome',
      required: false,
      type: 'string',
      description: 'رابط متجر كروم ويب',
    },
    {
      name: 'edge',
      required: false,
      type: 'string',
      description: 'رابط إضافات مايكروسوفت إيدج',
    },
    {
      name: 'firefox',
      required: false,
      type: 'string',
      description: 'رابط إضافات فايرفوكس برورسر',
    },
    {
      name: 'opera',
      required: false,
      type: 'string',
      description: 'رابط إضافات أوبرا',
    },
    {
      name: 'safari',
      required: false,
      type: 'string',
      description: 'رابط متجر ماك ستور',
    },
    {
      name: 'browserExtension',
      required: false,
      type: 'string',
      description:
        'صفحة هبوط لمستخدمي الإضافة المكتبية عندما تكون روابط المتصفح غير متوفرة',
    },
  ]}
/>

### أمثلة

على سبيل المثال، لإنشاء محفظة مخصصة باستخدام WalletConnect:

```tsx
import { Wallet, getWalletConnectConnector } from '@rainbow-me/rainbowkit';

export interface MyWalletOptions {
  projectId: string;
}

export const rainbow = ({ projectId }: MyWalletOptions): Wallet => ({
  id: 'my-wallet',
  name: 'My Wallet',
  iconUrl: 'https://my-image.xyz',
  iconBackground: '#0c2f78',
  downloadUrls: {
    android: 'https://play.google.com/store/apps/details?id=my.wallet',
    ios: 'https://apps.apple.com/us/app/my-wallet',
    chrome: 'https://chrome.google.com/webstore/detail/my-wallet',
    qrCode: 'https://my-wallet/qr',
  },
  mobile: {
    getUri: (uri: string) => uri,
  },
  qrCode: {
    getUri: (uri: string) => uri,
    instructions: {
      learnMoreUrl: 'https://my-wallet/learn-more',
      steps: [
        {
          description:
            'We recommend putting My Wallet on your home screen for faster access to your wallet.',
          step: 'install',
          title: 'Open the My Wallet app',
        },
        {
          description:
            'After you scan, a connection prompt will appear for you to connect your wallet.',
          step: 'scan',
          title: 'Tap the scan button',
        },
      ],
    },
  },
  extension: {
    instructions: {
      learnMoreUrl: 'https://my-wallet/learn-more',
      steps: [
        {
          description:
            'We recommend pinning My Wallet to your taskbar for quicker access to your wallet.',
          step: 'install',
          title: 'Install the My Wallet extension',
        },
        {
          description:
            'Be sure to back up your wallet using a secure method. Never share your secret phrase with anyone.',
          step: 'create',
          title: 'Create or Import a Wallet',
        },
        {
          description:
            'Once you set up your wallet, click below to refresh the browser and load up the extension.',
          step: 'refresh',
          title: 'Refresh your browser',
        },
      ],
    },
  },
  createConnector: getWalletConnectConnector({ projectId }),
});
```

يمكنك بعد ذلك إضافة محفظتك المخصصة في [قائمة المحافظ](/docs/custom-wallet-list).
